package orm

import (
	"appService/src/global"
	_ "github.com/go-sql-driver/mysql"
	"github.com/gogf/gf/frame/g"
	_ "github.com/mattn/go-sqlite3"
	"os"
	"path/filepath"
	"xorm.io/xorm"
	"xorm.io/xorm/log"
	"xorm.io/xorm/names"
)

/*
➤
✿
┏━
┣━
┗━
*/
var (
	Db *xorm.Engine //数据库连接返回实例

)

//数据库初始化
func Init() {
	g.Log().Infof("➤ 连接数据库")
	var err error
	dbType := g.Cfg().GetInt("database.dbType")
	switch dbType {
	case 0: // 连接mysql数据库
		g.Log().Infof("✿ 当前使用的数据为 MySql")
		link := g.Cfg().GetString("database.mysql.link")
		Db, err = xorm.NewEngine("mysql", link)
		break
	case 1: // 连接 Sqlite3
		g.Log().Infof("✿ 当前使用的数据为 Sqlite")
		link := filepath.Join(global.ApplicationDir, g.Cfg().GetString("database.sqlite.link"))
		Db, err = xorm.NewEngine("sqlite3", link)
		break
	default:
		g.Log().Infof("✖ 连接数据库失败，系统未找到数据库类型")
		os.Exit(1)
	}
	//判断数据库是否连接成功
	if err != nil {
		g.Log().Infof("✖ 连接数据库失败，错误：%v", err)
		os.Exit(1)
	}
	// 数据表 前缀映射
	tbMapper := names.NewPrefixMapper(names.SnakeMapper{}, global.DbTablePrefix)
	Db.SetTableMapper(tbMapper)
	if global.Debug {
		Db.ShowSQL(true)                    // 则会在控制台打印出生成的SQL语句；
		Db.Logger().SetLevel(log.LOG_DEBUG) // 会在控制台打印调试及以上的信息；
		g.Log().Infof("➤ 开启数据库日志输出")
	}else{
		Db.ShowSQL(false)
		g.Log().Infof("➤ 关闭数据库日志输出")
	}
}
